<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>构造函数</title>
</head>
<body>
    <!-- 
        通过构造函数实现封装，通过原型来实现继承 
        
        封装是面向对象思想中比较重要的一部分，js 面向对象可以通过构造函数实现封装
        同样的将变量和函数组合到了一起并能通过this实现数据的共享，借助构造函数创建出来的实例对象之间是彼此不影响的
        总结：
            构造函数体现了面向对象封装特性
            构造函数实例创建的对象彼此独立、互不影响
        注意：es6 语法已经存在 class 来创建对象了，我只是学习用 es5 的语法来进行创建

        使用构造函数方法好用，但是 存在浪费内存的问题
            当构造函数中存在复杂数据类型的时候，每 new 一次他都会开辟一个空间，会造成内存浪费
            解决方法：通过原型对象 prototype 来添加，他的所有子链都可以访问到这个函数  
     -->
     <script>
        // 构造函数  公共的属性和方法 封装到 Star 构造函数里面
        function Star(uname,age){
            this.uname = uname
            this.age = age
            this.sing = function(){
                console.log("唱歌");
            }
        }

        const ldh = new Star('刘德华',52)
        const zjl = new Star('周杰伦',40)
        console.log(ldh === zjl );   // false

     </script>
</body>
</html>
